//package com.ciaojian.client.auth;
//
//import com.ciaojian.client.config.ClientApiConfig;
//import com.ciaojian.client.service.UserServiceImpl;
//import com.ciaojian.client.util.RequestUtil;
//import com.ciaojian.client.util.StringTool;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.method.HandlerMethod;
//import org.springframework.web.servlet.HandlerInterceptor;
//import org.springframework.web.servlet.ModelAndView;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//
///**
// * 拦截校验身份
// *
// * @author cano
// */
//public class AuthorizationInterceptor implements HandlerInterceptor {
//    @Autowired
//    private TokenManager tokenManager;
//    private static Logger log = LoggerFactory.getLogger(AuthorizationInterceptor.class);
//    @Autowired
//    private TokenProvider tokenProvider;
//    @Autowired
//    private UserServiceImpl userInfoService;
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        String path = request.getRequestURI();
//        log.info(RequestUtil.getRemoteAddr(request) + "##RequestURL##" + request.getRequestURL() + "##getQueryString##" + request.getQueryString());
//        String header = request.getHeader(ClientApiConfig.JWT_TOKEN_HEADER_PARAM);
//        //放开 accessToken刷新接口和安全检查接口
//        if (path.contains("/error")) {
//            Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
//            if(statusCode==404){
//                response.sendRedirect("http://www.ciaojian.com");
//            }
//            return true;
//        }
//        if(path.contains("/goodsInfo/productModif")){// 接收推送调试
//              log.info("#1#productModif##"+request.getParameter("cust_id"));
//        }
//        // 根据路径判断是内部调用的接口
//        if (path.contains("/manager/rest") || path.contains("/heartBeat/bang")) {//内部调用接口
//            log.info("##header##" + header);
//            if (header == null || "".equals(header)) {
//                response.setStatus(401);
//                return false;
//            }
//            String tokenKey = header.replace(ClientApiConfig.JWT_TOKEN_HEADER_PREFIX, "");
//            if (!ClientApiConfig.INPATH.contains(path)) {
//                //非刷新权限接口需要接口验证
//                if (!tokenManager.checkToken(tokenKey)) {
//                    response.setStatus(401);
//                    return false;
//                }
//            }
//            response.setHeader(ClientApiConfig.JWT_TOKEN_HEADER_PARAM, ClientApiConfig.JWT_TOKEN_HEADER_PREFIX + tokenKey);
//            return true;
//        }
//        // 最终是所有路径都校验// 外部调用接口
//        // 填充公共参数f
//        String bearToken = request.getHeader(TokenConsts.AUTHORIZATION_HEADER);
//        String lang = request.getHeader(TokenConsts.LANG);
//        // 保存数据到上下文
//        TokenService.PublicParameter publicParameter = TokenService.getPublicParameter();
//        publicParameter.setIp(RequestUtil.getRemoteAddr(request));
//        if (StringTool.isEmpty(lang)) {
//            lang = "cn";//中文
//        }
//        publicParameter.setLang(lang);
//        // 检查token
//        HandlerMethod handlerMethod = (HandlerMethod) handler;
//        // 配置该注解，说明不进行用户拦截
//        IgnoreAppToken ignoreTokenAnnotation = handlerMethod.getBeanType().getAnnotation(IgnoreAppToken.class);
//        if (ignoreTokenAnnotation != null || handlerMethod.getMethodAnnotation(IgnoreAppToken.class) != null) {
//            return true;
//        }
//        log.info("##进去token校验#" + path);
//        if (bearToken == null) {
//            response.setStatus(401);
//            return false;
//        }
//        // 登录接口token限制
//        if (!bearToken.contains(".")) {
//            response.setStatus(401);
//            return false;
//        }
//        publicParameter.setToken(bearToken);
//        TokenUser jwtUser = tokenProvider.getTokenUser(bearToken); // 校验token
//        if (jwtUser == null) {
//            response.setStatus(401);
//            return false;
//        }
//        // 验证token是否有效
//        String tokenId = jwtUser.getTokenId();
//        String userId = jwtUser.getUserId();
//        // 验证token是否有效
//        if (jwtUser != null) {
//            if (!userInfoService.isUserTokenValid(jwtUser.getUserId(), tokenId)) {
//                log.info("过期的userId:{},tokenId:{}", userId, tokenId);
//                response.setStatus(401);
//                return false;
//            }
//            //log.debug("刷新过期时间userId:{},tokenId:{}", userId, tokenId);
//            userInfoService.refreshUserTokenInfo(jwtUser.getUserId(), tokenId);
//        }
//        return true;
//    }
//
//    @Override
//    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//
//    }
//
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//
//    }
//}
